// 业务-后续考虑搬离
export function logoutAndClear() { // 退出登录并清空session存储
  storage.clearAll()
}


// 存储
export const storage = {
  get: (itemname, type='session') => { // session类型是sessionStorage存储，local类型是localStorage存储
    if (type === 'session') {
      try{
        return JSON.parse(sessionStorage.getItem(itemname))
      }catch (e) {
        return sessionStorage.getItem(itemname)
      }
    } else {
      try{
        return JSON.parse(localStorage.getItem(itemname))
      }catch (e) {
        return localStorage.getItem(itemname)
      }
    }
  },
  set: (itemname, value, type='session') => {
    if (type === 'session') {
      sessionStorage.setItem(itemname, JSON.stringify(value))
    } else {
      localStorage.setItem(itemname, JSON.stringify(value))
    }
  },
  remove: (itemname, type='session') => {
    if (type === 'session') {
      sessionStorage.removeItem(itemname)
    } else {
      localStorage.removeItem(itemname)
    }
  },
  clear: (type='session') => {
    if (type === 'session') {
      sessionStorage.clear()
    } else {
      localStorage.clear()
    }
  },
  clearAll() {
    sessionStorage.clear();
    localStorage.clear();
  }
};

// 判断
export const judge = {
  isEmpty: (val) => { // 是否为空，判断val是否为''，是否为null，是否为undefined
    return !((val??'') !== '')
  },
  hasKey: (obj, key) => { // 判断对象是否有key
    return obj.hasOwnProperty(key);
  },
};

// 正则
export const reg = {
  mobilePhone: (val) => {
    if (typeof val !== 'string') { return console.error('mobilePhone方法入参格式错误，需要为字符串')}
    return /^(13[0-9]|14[01456789]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(val)
  }
}

// 计算、数学
export const math = {
  getDecimalPlaces: (val) => { // 获取小数点位数
    return val.toString.split('.')[1].length;
  }
}

// 转换
export const format = {
  msToDateStr: (ms) => { // 毫秒值转YYYY-MM-DD HH:mm:ss
    if (ms) {
      let t = new Date(ms);
      return `${t.getFullYear()}-${this.toB(t.getMonth()+1)}-${this.toB(t.getDate())} ${this.toB(t.getHours())}:${this.toB(t.getMinutes())}:${this.toB(t.getSeconds())}`
    }
  },
  toB: (val) => { // 补0凑双
    return String(val).padStart(2, '0')
  },
  arrToMap(arr, key, value) {
    // key：String，必填，设定对象数组中每个元素中需要作为key的对象属性
    // value：String，可选，指定对象数组中每个元素中需要作为value的对象属性，如果不填，则默认整个对象作为value
    let obj = {};
    // 判断尽量不要放在for循环中，避免每次循环都要判断，消耗性能
    if (value) {
      arr.forEach(item => {
        obj[key] = item[value]
      })
    } else {
      arr.forEach(item => {
        obj[key] = item
      })
    }
    return obj;
  }
}

// 数据处理
export const deal = {
  arrbToArraMerge(a = [], b = [], propA, propB) {
    // 有2个数组，一个数组是目标对象数组，一个是数据对象数组，目标数组中每个元素中都有固定某属性的值和数据数组某个元素的固定某某属性的值相同，
    // 然后希望进行匹配，将数据数组匹配的到元素的所有数据都放入目标数组匹配中的元素上
    let arr = JSON.parse(JSON.stringify(a));
    for(let i = 0, al = arr.length; i<al; i++) {
      for(let j = 0, bl = b.length; j<bl; j++) {
        if (arr[i][propA] === b[j][propB]) {
          arr[i] = Object.assign({}, arr[i], b[j]);
          b.slice(j, 1);
        }
      }
    }
    return arr;
  },
  getDateFromArrByKey(arr, matchKey, matchValue, dataKey) {
    // 从数组中获取匹配项的某个属性值
    const i = arr.findIndex(item => item[matchKey] === matchValue);
    return i>-1 ? arr[i][dataKey] : null;
  },
  trimStr(str) { // 头尾去空格
    return str.replace(/(^\s*)|(\s*$)/g, '');
  },
  getUrlParam(url) { // 获取url的？后面的参数
    let paramStr = url.split('?')[1];
    let list = paramStr.split('&');
    let obj = {};
    list.forEach(item => {
      let a = item.split('=');
      obj[a[0]] = a[1];
    });
    return obj
  }
};
